Function.prototype.mycall = function (thisArg) {
  // 如果没传参数 就以window
  let context = thisArg || window;
  //  arguments是伪数组 先转化为数组 之后 从第二个元素（下标为0）开始拷贝剩余的作为参数
  let argus = Array.from(arguments).slice(1);
  // 为这个对象创建一个属性 属性为play函数 这里的this就指向 mycall的调用者 即play函数
  context["fn"] = this;
  context["fn"](...argus); // 执行play函数 此时这个函数的调用者 是context 即 传入的 obj 达到改变this指向的效果
  delete context["fn"]; // 删除刚才添加的属性
};

function play(name, age) {
  console.log(name + age); // coderqian22
  console.log(this.name); //obj-coderqian
}

let obj = {
  name: "obj-coderqian",
};
play.mycall(obj, "coderqian", 22);
